#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <string>
// printBlockList

// void printBlock()
// {
//     sigset_t set, oset;
//     sigemptyset(&set);
//     sigemptyset(&oset);

//     sigprocmask(SIG_BLOCK, &set, &oset);

//     std::cout << "current block list: [" << getpid() << "]" << std::endl;
//     for (int i = 31; i >= 0; i--)
//     {
//         if (sigismember(&oset, i))
//         {
//             std::cout << "blocked signal: " << i << std::endl;
//         }
//         else
//             std::cout << 0;
//     }

//     std::cout << std::endl;
// }

// void handler(int signum)
// {
//     static int cnt = 0;
//     cnt++;
//     while (true)
//     {
//         std::cout << "get a signal :" << signum << std::endl;
//         printBlock();
//         sleep(1);
//     }
//     exit(1);
// }

// int main()
// {

//     struct sigaction act, oact;
//     act.sa_handler = handler;
//     ::sigaction(2, &act, &oact);

//     while (true)
//     {
//         printBlock();
//         // pause();
//         // std::cout << "hello world" << std::endl;
//         // sleep(1);
//         sleep(1);
//     }

//     return 0;
// }
int flag = 0;

void change(int signum)

{
    (void)signum;
    flag = 1;
    printf("change flag 0 --> 1,   pid: %d\n", getpid());
    exit(1);
}

int main()
{

    // printf("I am the main process pid: %d\n", getpid());
    signal(2, change);
    while (!flag)
    {
        printf("I am the main process pid: %d\n", getpid());
        sleep(1);
    }

    return 0;
}